﻿#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

//#define name stuff
//#define MAX 1000
//#define reg register //为 register这个关键字，创建一个简短的名字 
//#define do_forever for(;;) //⽤更形象的符号来替换⼀种实现 
////for循环的判断部分什么都不写的时候，意味着判断恒为真，就是死循环
//
//#define CASE break;case //在写case语句的时候⾃动把 break写上。 
//
//// 如果定义的 stuff过⻓，可以分成⼏⾏写，除了最后⼀⾏外，每⾏的后⾯都加⼀个反斜杠(续⾏符)。
////  "\"反斜杠 ---> 续行符
//#define DEBUG_PRINT printf("file:%s\tline:%d\t \
//							date:%s\ttime:%s\n" ,\
//							 __FILE__,__LINE__ , \
//							__DATE__,__TIME__ ) 
//	
//
//int main()
//{
//	register int num = 100;//建议将num放在寄存器中
//	//do_forever; for循环陷入死循环-
//	DEBUG_PRINT;
//
//	return 0;
//}

//#define Max 100;

//int main()
//{
//	int m = Max;
//	//int m = 100;
//	//     ;
//	printf("%d\n", m);
//
//	return 0;
//}

// 这是一个错误的示范
//#define MAX 100; //这样写是不好的
//
//int main()
//{
//	int a = 0;
//	int b = 0;
//	if (a < 0)//if 和  else  后面默认只能有一条语句
//		a = MAX;
//	else
//		b = -MAX;
//	return 0;
//}

//#define SQUARE(N)  N*N
//
//int main()
//{
//	int a = 10;
//	int r = SQUARE(a);
//	printf("%d\n", r);
//
//	return 0;
//}


//#define SQUARE(N)  N*N
////在写宏的时候，一个整体尽量带上括号
//
//int main()
//{
//	int a = 5;
//	int r = SQUARE(a + 1);
//	printf("%d\n", r);//11
//
//	return 0;
//}


//#define SQUARE(N)  ((N)*(N))
//
//int main()
//{
//	int a = 5;
//	int r = SQUARE(a + 1);
//	printf("%d\n", r);//36
//
//	return 0;
//}

//#define DOUBLE(X) (X)+(X)
//
//int main()
//{
//	int r = 10 * DOUBLE(4);//44
//
//	printf("%d\n", r);
//
//	return 0;
//}
//

//#define DOUBLE(X) ((X)+(X))
//
//int main()
//{
//	int r = 10 * DOUBLE(4);
//
//	printf("%d\n", r);//80
//
//	return 0;
//}
//

//int main()
//{
//	int a = 10;
//	//int b = a + 1; //没有副作用
//	//b=11, a=10
//	int b = ++a;     //代码是有副作用
//	//b=11, a=11
//	return 0;
//}

//写一个宏，求两个数的较大值

//#define MAX(x, y)  ((x)>(y)?(x):(y))
//
//int main()
//{
//	int a = 10;
//	int b = 12;
//	int m = MAX(a, b);
//	printf("%d\n", m);
//
//	return 0;
//}


////宏的形式
//#define MAX(x, y)  ((x)>(y)?(x):(y))
//
////函数的形式
//int Max(int x,int y)
//{
//	return x > y ? x : y;
//}
//
//int main()
//{
//	int a = 10;
//	int b = 12;
//	//int m1 = MAX(a++, b++);
//	//printf("m1 = %d\n", m1);//13
//
//	int m2 = Max(a++, b++);
//	printf("m2 = %d\n", m2);//12
//
//	return 0;
//}


//#define MAX(x, y)  ((a++)>(b++)?(a++):(b++))
//
//int main()
//{
//	int a = 10;//11
//	int b = 12;//13 14
//	int m = ((a++) > (b++) ? (a++) : (b++));
//	//        10      12              13
//	printf("%d\n", m);//13
//
//	return 0;
//}

//宏的形式
//#define MAX(x, y)  ((x)>(y)?(x):(y))
//#define B 12
//
//int main()
//{
//	int a = 10;
//	
//	int m1 = MAX(a, B);
//	printf("m1 = %d\n", m1);
//	printf("B = %d\n", B);
//
//	return 0;
//}

//宏的形式
//#define MAX(x, y)  ((x)>(y)?(x):(y))
//
////函数的形式
//int Max(int x,int y)
//{
//	return x > y ? x : y;
//}
//
//int main()
//{
//	int a = 10;
//	int b = 12;
//	//宏
//	int m1 = MAX(a, b);
//	//int m1 = ((a)>(b)?(a):(b));
//	printf("m1 = %d\n", m1);
//
//	//函数
//	int m2 = Max(a, b);
//	printf("m2 = %d\n", m2);
//
//	return 0;
//}


//#define MALLOC(num, type)\
// (type*)malloc(num*sizeof(type))
//
//int main()
//{
//		//使⽤ 
//	(int*)MALLOC(10, int);//类型作为参数 
//
//	//预处理器替换之后： 
//	(int*)malloc(10,sizeof(int));
//	return 0;
//}

// #define MALLOC(n, type) (type*)malloc(n * sizeof(type))
//
//int main()
//{
//	//int*p = (int*)malloc(10 * sizeof(int));
//	double*p = MALLOC(10, double);
//	//double *p = (double*)malloc(10 * sizeof(double));
//
//	return 0;
//}


//int main()
//{
//	printf("hello world\n");
//	printf("hello"" world\n");//"" ""
//
//	return 0;
//}

//#define PRINT(n, format)  printf("the value of "#n" is "format"\n", n)
//// #n --->  "n"
//
//int main()
//{
//	int a = 10;
//	//printf("the value of a is %d\n", a);
//	PRINT(a, "%d");  
//	//printf("the value of ""a"" is "format"\n", a)
//	float f = 3.14f;
//	//printf("the value of f is %f\n", f);
//	PRINT(f, "%f");
//	//printf("the value of ""f"" is "format"\n", f)
//
//	return 0;
//}


//#define PRINT(n, format)  printf("the value of "#n" is "format"\n", n)
//
//int main()
//{
//	int abc = 10;//abc也可以使用
//	PRINT(abc, "%d");
//	float f = 3.14f;
//	PRINT(f, "%f");
//
//	return 0;
//}

//#define CAT(X, Y) X##Y
//
//int main()
//{
//	int Class117 = 100;
//	printf("%d\n", CAT(Class, 117));
//
//	return 0;
//}
//


//#define GENERIC_MAX(type) \
//type type##_MAX(type x, type y)\
//{								\
//	return x > y ? x : y;		\
//}
//
//GENERIC_MAX(int)
//
//GENERIC_MAX(double)
//
//GENERIC_MAX(float)
//
//int main()
//{
//	int r = int_MAX(10, 20);
//	printf("%d\n", r);
//	return 0;
//}

//#define MAX 100
//
//int main()
//{
//	int m = MAX;
//	printf("%d\n", m);
//	printf("%d\n", MAX);
//#undef MAX  //这条指令⽤于移除⼀个宏定义。
//
//#define MAX 101
//	int n = MAX;
//	printf("%d\n", MAX);
//
//	return 0;
//}

//#include <stdio.h>
//#define __DEBUG__
//
//int main()
//{
//	int i = 0;
//	int arr[10] = { 0 };
//	for (i = 0; i < 10; i++)
//	{
//		arr[i] = i;
//#ifdef __DEBUG__
//		printf("%d\n", arr[i]);//为了观察数组是否赋值成功。  
//#endif //__DEBUG__
//	}
//	return 0;
//}

//#define M 100
//
//int main()
//{
//#if M>200
//	printf("hehe\n");
//#endif
//	printf("haha\n");
//	return 0;
//}

//#define M 70
//
//int main()
//{
//#if M<50
//	printf("hehe\n");
//#elif M>50 && M<80
//	printf("haha\n");
//#else
//	printf("heihei\n");
//#endif
//	printf("xixi\n");
//	return 0;
//}

/*
	#if defined(symbol)
	#ifdef symbol
	#if !defined(symbol)
	#ifndef symbol
*/

//#define M 0
//
//int main()
//{
//#if defined(M)
//	printf("hehe\n");
//#endif
//
//#ifdef M
//	printf("xixi\n");
//#endif
//
//	return 0;
//}


//#define M 0

//int main()
//{
//#if !defined(M)
//	printf("hehe\n");
//#endif
//
//#ifdef M
//	printf("xixi\n");
//#endif
//
//	return 0;
//}


//int main()
//{
//#if defined(M)
//	printf("hehe\n");
//#endif
//
//#ifdef M
//	printf("hehe\n");
//#endif
//	return 0;
//}

//#define M 100
//int main()
//{
////#if !defined(M)
////	printf("hehe\n");
////#endif
//
//#ifndef M
//	printf("hehe\n");
//#endif
//	return 0;
//}

int main()
{
	printf("hehe\n");
	return 0;
}